#include <iostream>
using namespace std;
int cargarPalabras(string vecCadenas[]);
int pedirOpcion ();
string palabraMasLarga(string vecCadenas[],int cantidad);
void reemplazarCaracter(string vecCadenas[],int cantidad,char letra1,char letra2);
void invertirTodasLasPalabras(string vecCadenas[],int cantidad);
void mostrarPalabras(string vecCadenas[],int cantidad);
void mostrarPalabrasQueEmpiezan(string vecCadenas[],int cantidad,char letra);
void mostrarPalabrasQueContienen(string vecCadenas[],int cantidad,char letra);
int main()
{
	string vecCadenas[50];
	int cantCadenas = 0;
	int opcion;
	char caracter1, caracter2;
	int cantPalabras;

    cout <<"Ingrese palabras (maximo 50). Para finalizar ingrese la palabra <listo>"<<endl;
    cantCadenas = cargarPalabras (vecCadenas);

	opcion = pedirOpcion();

	while (opcion!=7)
	{
		switch (opcion)
		{
			case 1:
				mostrarPalabras(vecCadenas, cantCadenas);
				break;
			case 2:
				cout << "ingrese un caracter: ";
				cin >> caracter1;
				mostrarPalabrasQueEmpiezan(vecCadenas, cantCadenas, caracter1);
				break;
			case 3:
				cout << "ingrese un caracter: ";
				cin >> caracter1;
                mostrarPalabrasQueContienen(vecCadenas, cantCadenas, caracter1);
				break;
			case 4:
				cout << palabraMasLarga(vecCadenas, cantCadenas);
				break;
			case 5:
				cout << "ingrese un caracter: ";
				cin >> caracter1;
				cout << "ingrese otro caracter: ";
				cin >> caracter2;
                reemplazarCaracter (vecCadenas, cantCadenas, caracter1, caracter2);
                mostrarPalabras(vecCadenas, cantCadenas);
				break;
			case 6:
				invertirTodasLasPalabras(vecCadenas, cantCadenas);
				mostrarPalabras(vecCadenas, cantCadenas);
				break;
		}
		opcion = pedirOpcion();
	}
	return 1;
}



int cargarPalabras(string vec[])
{
    int i;
    i=0;
    while (i<50)
    {
        cin>>vec[i];
        if(vec[i]=="listo")
        {
            break;
        }
        i++;
    }
    return i;
}
int pedirOpcion ()
{
    int opcion;
    cout<<"1. Mostrar palabras."<<endl;
    cout<<"2. Mostrar palabras que empiezan con..."<<endl;
    cout<<"3. Mostrar palabras que contienen el caracter..."<<endl;
    cout<<"4. Mostrar palabra mas larga."<<endl;
    cout<<"5. Reemplazar caracter."<<endl;
    cout<<"6. Invertir todas las palabras."<<endl;
    cout<<"7. Salir."<<endl;
    cin>>opcion;
    return opcion;
}
void mostrarPalabras(string vec[],int cantidad)
{
    int i;
    i=0;
    while (i<cantidad)
    {
        cout<<vec[i]<<endl;
        i++;
    }
}
void mostrarPalabrasQueEmpiezan(string vec[],int cantidad,char letra)
{
    int i,j;
    i=0;
    j=0;
    while (i<cantidad)
    {
        if (letra==vec[i][0])
        {
            cout<<vec[i]<<endl;
            j=1;
        }
        i++;
    }
    if (j==0)
    {
        cout<<"error"<<endl;
    }
}
void mostrarPalabrasQueContienen(string vec[],int cantidad,char letra)
{
    int i,j,k;
    k=0;
    i=0;

    while(i<cantidad)
    {   j=0;
        while(j<vec[i].length())
        {
            if(letra==vec[i][j])
            {
                cout<<vec[i]<<endl;
                k=1;
                break;
            }else
            {
                j++;
            }
        }
        i++;
    }
}
string palabraMasLarga(string vec[],int cantidad)
{
    int p,i;
    string palabra;
    i=0;
    palabra=vec[i];
    p=vec[i].length ();
    while(i<cantidad)
    {
        if(vec[i].length()>p)
        {
            p=vec[i].length();
            palabra=vec[i];
        }
        i++;
    }
    return palabra;
}
void reemplazarCaracter(string vec[],int cantidad,char letra1,char letra2)
{
    int i=0;
    int k=0;
    int j;
    while(i<cantidad)
    {
        j=0;
        while(j<vec[i].length())
        {
            if(letra1==vec[i][j])
            {
                vec[i][j]=letra2;
                k=1;
            }
            j++;
        }
        i++;
    }
    if (k==0)
    {
        cout<<"No se encuentra la letra."<<endl;
    }
}
void invertirTodasLasPalabras(string vec[],int cantidad)
{
    int k,j,i,aux;
    i=0;
    while(i<cantidad)
    {
        j=0;
        k=1;
        while(j<vec[i].length()/2)
        {
            aux=vec[i][vec[i].length()-k];
            vec[i][vec[i].length()-k]=vec[i][j];
            vec[i][j]=aux;
            j++;
            k++;
        }
        i++;
    }
}
